package com.haoyun.mirage.user.service;

import com.baomidou.mybatisplus.service.IService;
import com.haoyun.common.core.BaseException;
import com.haoyun.mirage.user.model.dto.MenuDTO;
import com.haoyun.mirage.user.model.entity.SysMenu;
import com.haoyun.mirage.user.model.vo.MenuTree;

import java.util.List;

/**
 * <p>
 * 菜单权限表 服务类
 * </p>
 *
 * @author twg
 * @since 2018-05-30
 */
public interface ISysMenuService extends IService<SysMenu> {

    /**
     * 通过角色名称查询URL 权限
     *
     * @param roleCode 角色名称
     * @return 菜单列表
     */
    List<MenuDTO> findMenuByRoleCode(String roleCode);

    /**
     * 通过角色id，查询菜单 权限
     *
     * @param roleId 角色ID
     * @return
     */
    List<MenuDTO> findMenuByRoleId(Long roleId);

    /**
     * 通过角色获取菜单权限列表
     *
     * @param roles 角色
     * @return 权限列表
     */
    String[] findPermission(String... roles);

    /**
     * 级联删除菜单
     *
     * @param id    菜单ID
     * @param roles 角色
     * @return 成功、失败
     */
    Boolean deleteMenu(Long id, String... roles);

    /**
     * 更新菜单信息
     *
     * @param sysMenu 菜单信息
     * @return 成功、失败
     */
    Boolean updateMenuById(SysMenu sysMenu);

    /**
     * 返回角色的菜单
     *
     * @param roleCodes 角色编号
     * @return 菜单列表
     */
    List<MenuTree> findMenuTreeByRoleCodes(String... roleCodes);

    /**
     * 添加菜单
     *
     * @param menu
     * @throws BaseException
     */
    Boolean insertMenu(SysMenu menu) throws BaseException;

    /**
     * 通过菜单名，判断菜单是否存在
     *
     * @param menuName
     * @return
     */
    Boolean isExist(String menuName);

}
